function f<T = number>() {}
f<number>();

function g<T = number, U = string>() {}
g<string, string>();

class C<T = number> {}
new C<number>();

class C<T = number> {}
class D extends C<number> {}

interface I<T = number> {}
class Impl implements I<number> {}

class Foo<T = number> {}
const foo = new Foo<number>();

interface Bar<T = string> {}
class Foo<T = number> implements Bar<string> {}

class Bar<T = string> {}
class Foo<T = number> extends Bar<string> {}

import { F } from './missing';
function bar<T = F<string>>() {}
bar<F<string>>();